<%@ page import="tmanager.*" import="java.sql.*" %>
<%@ include file="/WEB-INF/sql.jsp" %>

<%
    if (session.getAttribute("tmanager.studente") == null && (session.getAttribute("tmanager.professore") == null || session.getAttribute("tmanager.idStudente") == null)) { //nel caso di sessione non corretta, faccio redirect alla home
        response.sendRedirect("../index.jsp");
        return;
    }
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Pragma", "no-cache");
    response.setDateHeader("Expires", 0);


    //Recupero dalla sessione gli oggetti studente, professore, e idstudente
    Studente s = (Studente) session.getAttribute("tmanager.studente");
    Professore p = (Professore) session.getAttribute("tmanager.professore");
    Integer idStudente = (Integer) session.getAttribute("tmanager.idStudente");

    //Inizializzazione di variabili
    String destinatario = "";
    String mittente = "";
    boolean emailInviata = false;
    Messaggio messaggioReplied = null;

    //Controllo se l'utente sta rispondendo ad un messaggio precedente e recupero l'id del messaggio
    String idTimestamp = (request.getParameter("idMessaggio") == null) ? "-1" : request.getParameter("idMessaggio").trim();
    long idMessaggio = -1;
    try {
        idMessaggio = Long.parseLong(idTimestamp);
    } catch (NumberFormatException e) {
        idMessaggio = -1;
    }



    boolean isPost = request.getMethod().equals("POST");
    boolean oggettoNNConforme = false;
    boolean contenutoNNConforme = false;

    //Recupero l'oggetto, il contenuto e l'id del messaggio di cui è stato richiesto di fare il reply
    String oggetto = (request.getParameter("oggetto") == null) ? "" : request.getParameter("oggetto").trim();
    String contenuto = (request.getParameter("contenuto") == null) ? "" : request.getParameter("contenuto").trim();
    String replyM = (request.getParameter("reply") == null) ? "" : request.getParameter("reply").trim();

    if (isPost) { //la richiesta è un post: si tratta di un invio di messaggio
        //converto l'eventuale id di reply del messaggio in long
        long reply = -1;
        try {
            reply = Long.parseLong(replyM);
        } catch (NumberFormatException e) {
            reply = -1;
        }

        if (!replyM.equals("")) { //registro che è stato fatto reply del messaggio con id "reply"

            int tupleInserite = -1;
            try {
                tupleInserite = registraReplyLetto(messaggioReply, reply);
            } catch (SQLException e) {
                tupleInserite = -1;
                session.setAttribute("tmanager.erroreTitolo", "Errore di accesso al db");
                session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti ma si è verificato un errore d'accesso al database per l'aggiornamento dopo un reply di un messaggio. Il messaggio, comunque, è stato inviato.");

                response.sendRedirect("../errore.jsp");
                return;
            }
        }
        if (oggetto.equals("")) { //verifico se l'oggetto del messaggio è vuoto

            oggettoNNConforme = true;

        }
        if (contenuto.equals("")) { //verifico se il contenuto del messaggio è vuoto

            contenutoNNConforme = true;
        }
    } else { //la pagina viene richiesta con un get
        //Controllo che il messaggio sia una risposta, e non un nuovo messaggio
        if (idMessaggio != -1) {
            //effettuo un reply
            //recupero i dati messaggio di cui si vuole fare reply
            try {
                messaggioReplied = messaggioFromId(messaggioFromId, idMessaggio);
            } catch (SQLException e) {
                session.setAttribute("tmanager.erroreTitolo", "Errore di accesso al db");
                session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti ma si è verificato un errore d'accesso al database per il recupero del messaggio di cui si desidera fare il reply. Si consiglia di riprovare più tardi.");
                response.sendRedirect("../errore.jsp");
                return;
            }
            if (p != null && idStudente == null) {
                //sono professore e replico da tutti i messaggi
                idStudente = messaggioReplied.getIdStudente();
                session.setAttribute("tmanager.idStudente", idStudente);
            }
        }
    }


    if (s != null) {
        //sono uno studente
        //recupero dati del relatore
        String profNome = "";
        String profCognome = "";
        String profEmail = "";
        try {
            Professore profDati = new Professore();
            profDati = getProfessoreFromDB(s.getRelatore());
            profNome = profDati.getNome();
            profCognome = profDati.getCognome();
            profEmail = profDati.getEmail();
            mittente = s.getNome() + " " + s.getCognome();
            destinatario = profNome + " " + profCognome;

        } catch (SQLException e) {
            session.setAttribute("tmanager.erroreTitolo", "Errore di accesso al db");
            session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti ma si è verificato un errore d'accesso al database per il recupero dei dati destinatario. Si consiglia di riprovare più tardi.");

            response.sendRedirect("../errore.jsp");
            return;
        }




        if (!oggettoNNConforme && !contenutoNNConforme && isPost) { //è stato richiesto l'invio del messaggio e il messaggio prodotto è formalmente corretto

            java.util.Date date = new java.util.Date();
            long t = date.getTime();

            Messaggio m = new Messaggio(); //genero l'oggetto Messaggio corrispondente
            m.setIdStudente(s.getMatricola());
            m.setIdProfessore(s.getRelatore());
            m.setMittente(mittente);
            m.setDestinatario(destinatario);
            m.setMessaggioLetto(false);
            m.setOggetto(oggetto);
            m.setContenuto(contenuto);
            m.setTimestamp(t);
            m.setRispostaInviata(false);


            //registrazione e "invio" del messaggio
            int tupleInserite = -1;
            try {
                tupleInserite = registraMessaggio(insertMessaggio, m);
            } catch (SQLException e) {
                tupleInserite = -1;
                session.setAttribute("tmanager.erroreTitolo", "Errore di accesso al db");
                session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti ma si è verificato un errore d'accesso al database per il salvataggio del nuovo messaggio. Si consiglia di riprovare più tardi.");
                response.sendRedirect("../errore.jsp");

                return;
            }

            if (tupleInserite != - 1) { //se la procedura di creazione del messaggio su db ha avuto successo, invio al destinatario notifica email della presenza di un nuovo messaggio
                EMailManager em = new EMailManager();

                emailInviata = em.inviaEMail(profEmail, "Sistema T-Manager: nuova email ricevuta", "Buongiorno, \n"
                        + "hai appena ricevuto un messaggio dal tesista:" + s.getNome() + " " + s.getCognome() + ". \n"
                        + "Se desideri visualizzare il messaggio, accedi al sistema T-Manager.\n"
                        + "\n"
                        + "Cordiali saluti\n");


                if (!emailInviata) {
                    session.setAttribute("tmanager.erroreTitolo", "Errore durante la procedura di notifica messaggio al destinatario");
                    session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti, si è verificato un errore durante l'invio al docente della mail di notifica di nuovo messaggio. Il messaggio è comunque stato registrato nel sistema.");
                    response.sendRedirect("../errore.jsp");
                    return;
                }
            }
        }



    } else if (p != null && idStudente != null) {
        //sono un professore

        String studenteNome = "";
        String studenteCognome = "";
        String studenteEmail = "";
        try {
            Studente studTemp = getStudenteFromDB(sqlDatiStudente, idStudente);
            studenteNome = studTemp.getNome();
            studenteCognome = studTemp.getCognome();
            studenteEmail = studTemp.getEmail();
            mittente = p.getNome() + " " + p.getCognome();
            destinatario = studenteNome + " " + studenteCognome;

        } catch (SQLException e) {
            session.setAttribute("tmanager.erroreTitolo", "Errore di accesso al db");
            session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti ma si è verificato un errore d'accesso al database per il recupero dei dati destinatario. Si consiglia di riprovare più tardi.");

            response.sendRedirect("../errore.jsp");
            return;
        }


        if (!oggettoNNConforme && !contenutoNNConforme && isPost) { //dati per messaggio corretti
            java.util.Date date = new java.util.Date();
            long t = date.getTime();

            Messaggio m = new Messaggio();
            m.setIdStudente(idStudente);
            m.setIdProfessore(p.getIdentificativo());
            m.setMittente(mittente);
            m.setDestinatario(destinatario);
            m.setMessaggioLetto(false);
            m.setOggetto(oggetto);
            m.setContenuto(contenuto);
            m.setTimestamp(t);
            m.setRispostaInviata(false);


            int tupleInserite = -1;
            try {
                tupleInserite = registraMessaggio(insertMessaggio, m);
            } catch (SQLException e) {
                tupleInserite = -1;
                session.setAttribute("tmanager.erroreTitolo", "Errore di accesso al db");
                session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti ma si è verificato un errore d'accesso al database per il salvataggio del nuovo messaggio. Si consiglia di riprovare più tardi.");
                response.sendRedirect("../errore.jsp");
                return;
            }
            if (tupleInserite != - 1) {
                EMailManager em = new EMailManager();
                emailInviata = em.inviaEMail(studenteEmail, "Sistema T-Manager: nuova email ricevuta", "Buongiorno, \n"
                        + "hai appena ricevuto un messaggio dal tuo relatore:" + p.getNome() + " " + p.getCognome() + ". \n"
                        + "Se desideri visualizzare il messaggio, accedi al sistema T-Manager.\n"
                        + "\n"
                        + "Cordiali saluti\n");


                if (!emailInviata) {
                    session.setAttribute("tmanager.erroreTitolo", "Errore durante la procedura di notifica messaggio al destinatario");
                    session.setAttribute("tmanager.erroreMessaggio", "Siamo spiacenti, si è verificato un errore durante l'invio al docente della mail di notifica di nuovo messaggio. Il messaggio è comunque stato registrato nel sistema.");
                    response.sendRedirect("../errore.jsp");
                    return;
                }
            }
        }
    }
%>

<%!    
    static String sOggetto = "Il campo oggetto deve contenere l\'oggetto del messaggio. Si tratta di un campo obbligatorio.";
    static String sContenuto = "Il campo messaggio deve contenere il corpo del messaggio email da inviare al destinatario. Si tratta di un campo obbligatorio.";

%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Invio Messaggio EMail</title>
        <link rel="stylesheet" type="text/css" href="../CSS/defaultStyle.css" />
    </head>
    <body>
        <%@include file="../WEB-INF/jspf/header.jspf" %>
        <script type="text/javascript" src="../Scripts/scripts.js">
        </script>
        <script type="text/javascript">            
            function inizializza(){
                $("#riepilogoStatic").remove();
                $("#HinvioMess").addClass("paginaCorrente");
                $("#oggetto").bind("focusin",{sugg:"<%=sOggetto%>"}, definisciSugg);
                $("#oggetto").bind("focusout",rimuoviSuggGenerico);
                
                $("#contenuto").bind("focusin",{sugg:"<%=sContenuto%>"}, definisciSugg);
                $("#contenuto").bind("focusout",rimuoviSuggGenerico);
                $("<div class=\"menuRieplogo\"><h3>Suggerimenti:</h3></div>").appendTo("#corpoDx").fadeTo(10, 0.5);
            };
            $(document).ready(inizializza);
        </script>
        <div id="corpo">

            <% if (emailInviata) {%>
            <div id="corpoSx">
                <h2><img id="ok" src="../Immagini/Actions-dialog-ok-apply-icon50px.png"/>Email creata e inviata al destinatario con successo.</h2>
                <a href="../index.jsp"><img src="../Immagini/Home-icon30.png"/>Home Page</a>
            </div>
            <% } else {%>
            <div id="corpoDx">
                <div class="menuRieplogo" id="riepilogoStatic">
                    <h3>Suggerimenti:</h3>
                    <ul>
                        <li><%=sOggetto%></li>
                        <li><%=sContenuto%></li>
                    </ul>
                </div>
            </div>
            <div id="corpoSx">
                <h2 class="centrato">Invio Messaggio</h2>
                <form class="modificaProfilo" id="invioMessaggio" method="post" action="../Messaggio/invioMessaggio.jsp">
                    <fieldset>
                        <legend>Invio Messaggio</legend>
                        <label for="destinatario">Destinatario: </label>
                        <input type="text" class="testo" id="destinatario" name="destinatario" disabled="disabled" value="<%= destinatario%>"/>
                        <br />
                        <label for="oggetto">Oggetto:</label>
                        <%if (messaggioReplied != null) {%>
                        <input type="text" id="oggetto" class="testo" name="oggetto" value="<%= "Re:" + messaggioReplied.getOggetto()%>" />
                        <%} else {%>
                        <input type="text" id="oggetto" class="testo" name="oggetto"/>
                        <%}%>
                        <%if (oggettoNNConforme) {%>
                        <span class="err" id="err_oggetto">Il campo oggetto non pu&ograve; essere vuoto!</span>
                        <%}%>
                        <br />
                        <%if (messaggioReplied != null) {%>
                        <textarea rows="20" cols="40" class="testo" id="contenuto" name="contenuto" ><%= "\n\n\n\n" + "------Messaggio originale------\n" + "-da: " + messaggioReplied.getMittente() + "\n" + "-Oggetto originale: " + messaggioReplied.getOggetto() + "\n" + "-Contenuto: \n\n" + messaggioReplied.getContenuto() + "\n\n------------\n"%></textarea>
                        <%} else {%>
                        <textarea rows="20" cols="40" class="testo" id="contenuto" name="contenuto" ></textarea>
                        <%}%>
                        <%if (contenutoNNConforme) {%>
                        <br/>
                        <span class="err" id="err_contenuto">Il campo messaggio non pu&ograve; essere vuoto!</span>
                        <%}%>
                        <%if ((messaggioReplied != null) && !mittente.equals(messaggioReplied.getMittente())) {%>
                        <input type="hidden" id="reply" name="reply" value="<%= messaggioReplied.getTime()%>" />
                        <%}%>
                        <br />
                        <input type="submit" class="submit" id="creaMessaggio" name="creaMessaggio" value="Invia>>" />
                        <input type="reset" value="Cancella" id="cancella" />
                        <br/>
                        <br/>
                        <span class="reqField">Tutti i campi sono obbligatori</span>
                    </fieldset>
                </form>
                <%}%>
            </div>
            <hr />
        </div>
        <hr />
        <%@include file="../WEB-INF/jspf/footer.jspf" %>
    </body>
</html>
